/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
 /*
Date:2021/4/13 16:21pm
key:按最小的那个字符串去匹配。
*/
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n)
    {
        
        ListNode* p=head;
        ListNode* p1=head;
        int i=0;
        //如果是倒数第一个，那就要走两个才出发
        while(p!=nullptr)
        {
            //因此要大于n才走，晚一格走才能成为删除节点的前一个节点
            if(i>n)
            {
                
                p1=p1->next;
                
            }
            p=p->next;
            i++;
        }
        //遍历结束了i都没大于n，一步没走，因此是删除头节点。
        if(i==n)
        {
            head=head->next;
        }
        else
        {
            p1->next=p1->next->next;
        }

        return head;
    }
};